<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>keystone整体架构与功能 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>keystone整体架构与功能</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/OpenStack/">OpenStack</a>
			</span>
		
	</div>

	

	
		<h2 id="1-keystone的基本功能"><a href="#1-keystone的基本功能" class="headerlink" title="1. keystone的基本功能"></a>1. keystone的基本功能</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;keystone作为OpenStack的Identity Service，提供了用户信息管理和完成各个模块认证服务。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用户信息管理：user/tenant基本信息，tenant管理</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;认证服务：登录认证，各个组件API的权限控制</p>
<h2 id="2-keystone的架构"><a href="#2-keystone的架构" class="headerlink" title="2.keystone的架构"></a>2.keystone的架构</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;既然keystone为各个模块提供认证服务，所以各个模块与keystone都有所交互。其中登录认证体现在用户访问各个组件的API时，调用了WSGI框架的authtoken filter，该filter最调用keystoneclient ，最终通过keystone验证token，完成对用户的登录认证。如果认证失败，用户将不能访问该API。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;以nova为例，authtoken filter在/etc/paste.ini目录中（如果不熟悉WSGI框架，暂且忽略之）</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/keystone%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%8A%9F%E8%83%BD/01.jpeg?raw=true" alt=""></figure></p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/keystone%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%8A%9F%E8%83%BD/02.jpeg?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;keystone在openstack的位置如下：</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/keystone%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%8A%9F%E8%83%BD/03.jpeg?raw=true" alt=""></figure>   </p>
<h2 id="3-keystone-基本概念介绍"><a href="#3-keystone-基本概念介绍" class="headerlink" title="3.keystone 基本概念介绍"></a>3.keystone 基本概念介绍</h2><ul>
<li><p>User<br>可简单的理解为用户，用户携带信物（token）能够访问openstack各个服务和资源。</p>
</li>
<li><p>Tenant<br>Tenant即租户，早期版本又称为project，它是各个服务中的一些可以访问的资源集合。比如通过nova创建虚拟机时要指定到某个租户中，在cinder创建卷也要指定到某个租户中。用户访问租户的资源前，必须与该租户关联，并且指定该用户在该租户下的角色。</p>
</li>
<li><p>Role<br>Role即角色，可以理解为VIP等级，用户的Role越高，在openstack中能访问的服务和资源就更多。</p>
</li>
<li><p>Service<br>Service即服务，如Nova、Glance、Swift、heat、ceilometer等。Nova提供云计算的服务，Glance提供镜像管理服务，Swift提供对象存储服务，heat提供资源编排服务，ceilometer则是提供告警计费服务，cinder提供块存储服务。</p>
</li>
<li><p>Endpoint<br>Service的显得太抽象笼统。Endpoint则具体化Service。Endpoint翻译为“端点”，我们可以理解它是一个服务暴露出来的访问点，如果需要访问一个服务，则必须知道他的endpoint，而endpoint一般为url，我们知道了服务的url，我们就可以访问它。Endpoint 的url具有public、private和admin这三种权限。public url可以被全局访问，private url只能被局域网访问，admin url被从常规的访问中分离。</p>
</li>
<li><p>Token<br>Token即是信物、令牌，用户通过用户名和密码获取在某个租户下的token，通过token，可以实现单点登录。</p>
</li>
<li><p>Credentials<br>该术语可以简单的理解为用户和密码。</p>
</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;keystone 里面的概念很多，其中最重要的是 User 和 Tenant 。其它的概念是由于安全和权限等因素引入。引用<a href="https://hcldirgit.github.io/2017/08/19/OpenStack/2.%20keystone%E6%A6%82%E5%BF%B5%E8%A7%A3%E6%9E%90/" target="_blank" rel="external">keystone概念解析</a>该文的理解，通俗的说：</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;如果把宾馆比作为Tenant，住宿的人就是User ，而宾馆就是 Tenant，宾馆可以提供多种诸如住宿、娱乐、饮食等多种服务（Service），具体来说，住宿是一种具体的服务（Endpoint）。就住宿而言，有普通间和总统套房，如果你的VIP等级（Role）高，你可以享受到豪华的总统套房。入住前，我们需要拿身份证开房（Credential），认证身份证不是冒牌货后（Authenticaiton），会给你一个房卡（Token），然后你拿着房卡，就可以进入房间和享受各种服务。</p>
<table>
<thead>
<tr>
<th style="text-align:center">User</th>
<th style="text-align:center">住宾馆的人</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:center">Credentials</td>
<td style="text-align:center">身份证</td>
</tr>
<tr>
<td style="text-align:center">Authentication</td>
<td style="text-align:center">认证你的身份证</td>
</tr>
<tr>
<td style="text-align:center">Token</td>
<td style="text-align:center">房卡</td>
</tr>
<tr>
<td style="text-align:center">Tenant</td>
<td style="text-align:center">宾馆</td>
</tr>
<tr>
<td style="text-align:center">Service</td>
<td style="text-align:center">宾馆可以提供的服务类别，比如，饮食类，娱乐类Endpoint具体的一种服务，比如吃烧烤，打羽毛球</td>
</tr>
<tr>
<td style="text-align:center">Role</td>
<td style="text-align:center">VIP 等级，VIP越高，享有越高的权限</td>
</tr>
</tbody>
</table>
<h2 id="4-keystone-的访问流程"><a href="#4-keystone-的访问流程" class="headerlink" title="4.keystone 的访问流程"></a>4.keystone 的访问流程</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;以创建一个虚拟机（server）为例，结合下图简述下keystone在openstack的访问流程。</p>
<ul>
<li><p>用户Alice通过自己的户名和密码向keystone申请token，keystone认证用户名和密码后，返回token1</p>
</li>
<li><p>Alice通过token1发送keystone查询他所拥有的租户，keystone验证token1成功后，返回Alice的所有Tenant</p>
</li>
<li><p>Alice选择一个租户，通过用户名和密码申请token，keystone认证用户名、密码、tenant后，返回token2。（其实1、2步仅仅是为了查询tenant，如果已经知道tenant，可以忽略1、2步）</p>
</li>
<li><p>Alice通过token2发送创建server的请求，keystone验证token2(包括该token是否有效，是否有权限创建虚拟机等)成功后，然后再把请求下发到nova，最终创建虚拟机</p>
</li>
</ul>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/keystone%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E4%B8%8E%E5%8A%9F%E8%83%BD/04.png?raw=true" alt=""></figure></p>

	

	
		<span class="different-posts"><a href="/2017/10/12/OpenStack/3. keystone整体架构与功能/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
